﻿
//百度地图实例
var map = null;

//地图容器控件
var containerId = null;

//初始化百度地图api的js
export function addScript(key, elementId, dotnetRef, backgroundColor, controlSize) {
    if (!key || !elementId) {
        return;
    }

    //设置百度地图容器控件id
    containerId = elementId;
    let url = "https://api.map.baidu.com/api?v=3.0&ak=";
    let scriptsIncluded = false;

    //获取所有js
    let scriptTags = document.querySelectorAll('body > script');
    scriptTags.forEach(scriptTag => {
        if (scriptTag) {
            let srcAttribute = scriptTag.getAttribute('src');

            //查找百度地图api的js是否已经添加到页面
            if (srcAttribute && srcAttribute.startsWith(url)) {
                scriptsIncluded = true;
                return true;
            }
        }
    });

    //如果百度地图的js已经添加到页面，就呈现初始地图到容器控件
    if (scriptsIncluded) {
        initMapsG(dotnetRef);
        return true;
    }

    //把百度地图的js添加到页面
    url = url + key + "&callback=initMapsG";
    let script = document.createElement('script');
    script.src = url;
    document.body.appendChild(script);
    return false;
}

//复位地图
export function resetMaps(elementId) {
    initMaps(elementId);
}

//呈现初始地图到容器控件
function initMapsG(dotnetRef) {
    initMaps(containerId);

    //定位
    geolocation(dotnetRef);
}

//呈现初始地图到容器控件
function initMaps(elementId) {
    //创建地图实例
    map = new BMap.Map(elementId, {
        //coordsType指定输入输出的坐标类型，3为gcj02坐标，5为bd0ll坐标，默认为5。指定完成后API将以指定的坐标类型处理您传入的坐标
        coordsType: 5
    });
    //创建默认地点坐标，北京
    var point = new BMap.Point(116.47496, 39.77856);

    //设置中心点坐标和地图级别
    map.centerAndZoom(point, 15);

    //开启鼠标滚轮缩放
    map.enableScrollWheelZoom(true);
    map.addControl(new BMap.NavigationControl());
    map.addControl(new BMap.ScaleControl());
    map.addControl(new BMap.OverviewMapControl());
    //map.addControl(new BMap.MapTypeControl());

    // 仅当设置城市信息时，MapTypeControl的切换功能才能可用
    //map.setCurrentCity("北京");
}

//定位，返回位置信息
export function geolocation(wrapper) {
    var geolocation = new BMap.Geolocation();

    //开启SDK辅助定位
    geolocation.enableSDKLocation();

    //执行定位，回调函数参数r包含位置信息
    geolocation.getCurrentPosition(function (r) {
        let location;
        if (this.getStatus() == BMAP_STATUS_SUCCESS) {
            var mk = new BMap.Marker(r.point);
            map.addOverlay(mk);
            map.panTo(r.point);
            location = r;
            location.Status = BMAP_STATUS_SUCCESS;//0
            console.log(r);

            // 设置中心点坐标和地图级别
            map.centerAndZoom(location.point, 15);
            //map.setCurrentCity(location.address.city);
        }
        else {
            location = {
                "Status": this.getStatus()
            };
        }

        if (wrapper) {
            //回调页面的dotnet函数，传递定位结果
            wrapper.invokeMethodAsync('GetResult', location);
        }

        return location;
    });
}